TOP

SQL GROUP BY

SQL GROUP BY Описание

Инструкция GROUP BY группирует строки с одинаковыми значениями в итоговые строки, например "найти количество клиентов в каждой стране".

Инструкция GROUP BY часто используется с агрегатными функциями (COUNT(), MAX(), MIN(), SUM(), AVG()), чтобы группировать набор результатов по одному.


GROUP BY Синтаксис

SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s)
ORDER BY column_name(s)

Демонстрационная база данных

Ниже приведена выборка из таблицы "Customers" ("Клиенты") базы данных "Northwind":

CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry
1Alfreds FutterkisteMaria AndersObere Str. 57Berlin12209Germany
2Ana Trujillo Emparedados y heladosAna TrujilloAvda. de la Constitución 2222México D.F.5021Mexico
3Antonio Moreno TaqueríaAntonio MorenoMataderos 2312México D.F.5023Mexico
4Around the HornThomas Hardy120 Hanover Sq.LondonWA1 1DPUK
5Berglunds snabbköpChristina BerglundBerguvsvägen 8LuleåS-958 22Sweden

SQL GROUP BY Примеры

В следующей инструкции SQL перечислено количество клиентов в каждой стране:

Run SQLSELECT COUNT(CustomerID), Country 
FROM Customers 
GROUP BY Country

В следующей инструкции SQL приведен список клиентов в каждой стране, отсортированный от высшего к низшему:

Run SQLSELECT COUNT(CustomerID), Country 
FROM Customers 
GROUP BY Country 
ORDER BY COUNT(CustomerID) DESC

Демонстрационная база данных

Ниже приведена выборка из таблицы "Orders" ("Заказ") базы данных "Northwind":

ProductIDOrderIDCustomerIDEmployeeIDOrderDateShipperID
1102489051996-07-043
2102498161996-07-051
3102503441996-07-082
4102518431996-07-081
5102527641996-07-092

И выборку из таблицы "Shippers" ("Отправители"):

ShipperIDShipperNamePhone
1Speedy Express(503) 555-9831
2United Package(503) 555-3199
3Federal Shipping(503) 555-9931

GROUP BY вместе с JOIN Пример

В приведенной ниже инструкции SQL перечислено количество заказов, отправленных каждым отправителем:

Run SQLSELECT Shippers.ShipperName, COUNT(Orders.OrderID) AS NumberOfOrders 
FROM Orders 
LEFT JOIN Shippers 
ON Orders.ShipperID = Shippers.ShipperID 
GROUP BY ShipperName